#############################################################################################
#采样自博客园，作者：mikigo，转载请注明原文链接：https://www.cnblogs.com/mikigo/p/13182619.html
#############################################################################################
import os
os.environ["DISPLAY"] = ":0" # 执行远程 写在import pyautogui之前
import pyautogui 

# sudo pip3 install python3-xlib
# sudo apt-get install scrot
# sudo apt-get install python3-tk
# sudo apt-get install python3-dev
# sudo pip3 install pyautogui

pyautogui.PAUSE = 1 #每个执行动作之后，都会等待1s
pyautogui.FAILSAFE = True #启动自动防故障功能（鼠标移到屏幕的左上角，将导致pyautogui产生pyautogui.FailSafeException异常）在自动化测试项目中，为了不自动跳出用例脚本，通常设置为False

pyautogui.size() #返回两个整数元素，包含屏幕的宽和高的像素数。
pyautogui.moveTo(x, y, duration=0.25) #移动到某个坐标，duration表示移动到目的位置所需的秒数。
pyautogui.moveRel(x, y, duration=0.25) #相对于当前位置移动鼠标。x，y可以为负数

pyautogui.positon() #返回鼠标的位置

pyautogui.click() #默认左键在当前位置点击
pyautogui.click(x, y, button='left') #在指定位置左键点击，button可以为'left','middle','right'
pyautogui.mouseDown() #按下不放
pyautogui.mouseUp() #释放鼠标按键
pyautogui.doubleClick() #双击左键
pyautogui.rightClick() #双击右键
pyautogui.middleClick() #双击中键

pyautogui.dragTo()  #鼠标拖动到一个位置
pyautogui.dragRel() #相对当前拖到一个距离的位置

pyautogui.scroll(number) #上下滚动的单位

#需安装scrot，才能在pyautogui中使用屏幕快照功能。sudo apt-get install scrot
image = pyautogui.screenshot() #image是一个屏幕快照的对象
image.getpixel(x, y) #返回图像中坐标处的像素对象，返回值是一个RGB元组，包含3个整数。

pyautogui.pixelMatchesColor(50, 200,(130,135,144)) >>True

pyautogui.locateOnScreen("xxx.png") >>(643, 745, 70, 29)
#返回4个整数的元素，分别是屏幕上首次发现该图像时左边的x坐标、顶边的y坐标、宽度以及高度。
#如果该图像在屏幕上能够找到多出，locateAllOnScreen()函数将返回一个对象，将它传给list()，返回一个4整数元组的列表。
list(pyautogui.locateAllOnScreen("xxx.png")) 
pyautogui.center((643, 745, 70, 29)) #>>返回图像区域的中心坐标

pyautogui.typewrite("message") #输入内容
pyautogui.typewrite(['ctrl','alt','a','left']) #从左到右，先后顺序按键盘的按键
pyautogui.keyDown('shift') #按住不放
pyautogui.keyUp() #键盘松开
pyautogui.press('ctrl') #单个按键
pyautogui.hotkey('ctrl','c') #组合按键（同时按）


#############################################################################################
#采样自博客园，作者：凯帅，转载请注明原文链接：https://www.cnblogs.com/wukai66/p/15698982.html
#############################################################################################

#自动防故障
pyautogui.FAILSAFE = False # 默认为True，这项功能意味着：当鼠标的指针在屏幕的最左上方，程序会报错；目的是为了防止程序无法停止
#停顿功能
pyautogui.PAUSE = 1 # 所有pyautogui的指令都要暂停一秒；其他指令不会停顿；这样做，可以防止键盘鼠标操作太快；
#点是否在屏幕上
pyautogui.onScreen(x, y) # 结果为true

#屏幕分辨率，鼠标位置
pyautogui.size() # 返回元组
pyautogui.position()
#鼠标移动
pyautogui.moveTo(100,300,duration=1) # 过程用时1秒
pyautogui.moveRel(50, 0, duration=0.25) # 从当前位置，右移50像素
#鼠标点击
pyautogui.click(10, 20, 2, 0.25, button='left') # 通用方法，参数：坐标 点击次数，点击时间间隔，点击左右中键，移动到坐标时间等
pyautogui.doubleClick() # 当前位置左击两下，参数：坐标 点击时间间隔，点击左右中键，移动到坐标时间等
pyautogui.mouseDown() # mouseUp leftClick rightClick middleClick # 鼠标按下 鼠标松开 左击 右击 中击
#鼠标拖拽
pyautogui.dragTo(100, 200, button='left') # 参数：坐标 点击左右中键，移动到坐标时间等
pyautogui.dragRel(0, -60, duration=0.2)
#鼠标滚轮
pyautogui.scroll(clicks=10, x=None, y=None) # 先移动到（100，100）再向上滚动10格

pyautogui.typewrite('Hello world!', interval=0.0) # 每次输入间隔0.25秒，输入Hello world!
pyautogui.press('enter') # 按下并松开（轻敲）回车键, 参数可以是列表['left', 'left', 'left', 'left']
pyautogui.hotkey('ctrl', 'v') # 组合按键（Ctrl+V）
pyautogui.keyDown('shift') #keyUp pyautogui.KEYBOARD_KEYS 按键名称列表

#提示弹窗
pyautogui.alert(text='要开始程序么？', title='请求框', button='OK') # 点击按钮或者关闭窗口都返回button的值。
#选择弹窗
pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # OK和Cancel按钮的消息弹窗,返回点击按钮的值，关闭窗口返回None（或者Cancel）
#输入弹窗
pyautogui.prompt(text='', title='', default='') # 返回输入的值（按ok）或者None （按cancel）
pyautogui.password(text='', title='', default='', mask='*') # 同上，输入显示为*

#截屏
pyautogui.screenshot(r'C:\screenshot.png', region=(0, 0, 300, 400)) # imageFilename=None, region=None,返回PIL.Image.Image
#取色
pix = pyautogui.pixel(220, 200) # 获取坐标(220,200)所在屏幕点的RGB颜色，返回三个元素的元组
#点匹配色
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10) # tolerance参数红、绿、蓝误差范围 返回True或者False
#找图
pyautogui.locateOnScreen(r'C:\screenshot.png') # 返回 Box(left=0, top=0, width=300, height=400)，可以用pyautogui.center(a)返回中心坐标
x, y = pyautogui.locateCenterOnScreen(r'C:\screenshot.png') # 取得图中心坐标
pyautogui.locateAllOnScreen(r'C:\screenshot.png') # 返回Box对象列表